package com.lagou.api;

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

import java.io.IOException;
import java.util.concurrent.CountDownLatch;

/**
 * @param null
 * @author oyz
 * @version 1.0
 * @description: TODO
 * @date 2022/2/25 9:26
 */
public class CreateSession implements Watcher {


    private static CountDownLatch countDownLatch = new CountDownLatch(1);

    /**
     客户端可以通过创建⼀个zk实例来连接zk服务器
     new Zookeeper(connectString,sesssionTimeOut,Wather)
     connectString: 连接地址：IP：端⼝
     sesssionTimeOut：会话超时时间：单位毫秒
     Wather：监听器(当特定事件触发监听时，zk会通过watcher通知到客户端)
     */


    public static void main(String[] args) throws IOException, InterruptedException {
        ZooKeeper zooKeeper = new ZooKeeper("192.168.106.128:2181", 5000, new CreateSession());
        System.out.println(zooKeeper.getState());

        // 计数工具类:不让main方法结束，让线程处于等待状态
        countDownLatch.await();
        System.out.println("客户端与服务端建立连接成功...");

    }

    /**
     * 回调方法：处理来自服务器端的watcher通知
     * @param watchedEvent
     */
    @Override
    public void process(WatchedEvent watchedEvent) {
        //当连接创建了，服务端发送给客户端SyncConnected事件
        if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
            // 接触主程序的等待阻塞状态
            countDownLatch.countDown();
        }

    }
}
